package sv.com.renacempleo.web.controller.ciuo;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.tuckey.web.filters.urlrewrite.utils.StringUtils;

import sv.com.renacempleo.dto.ciuo.CIUO_01;
import sv.com.renacempleo.dto.ciuo.CIUO_02;
import sv.com.renacempleo.dto.ciuo.CIUO_03;
import sv.com.renacempleo.dto.ciuo.CIUO_04;
import sv.com.renacempleo.dto.ciuo.Ocupaciones;
import sv.com.renacempleo.exception.WebException;
import sv.com.renacempleo.web.controller.BaseController;
import sv.com.renacempleo.web.controller.objects.RedOfertaForm;
import sv.com.renacempleo.web.util.DBContext;
import sv.com.renacempleo.web.util.WebUtilidades;

@SuppressWarnings("serial")
@Controller
@RequestMapping("/ciuo")
public class CiuoController extends BaseController{
	
	@RequestMapping(value = "/view", method = {RequestMethod.GET, RequestMethod.POST})
	public String view(ModelMap model, 
			@RequestParam (required = false) String header) {
		model.addAttribute(WebUtilidades.HEADER_TITLE, StringUtils.isBlank(header) ? "CIUO" : header);
		
		return "ciuo/redCiuo";
	}
	
	@RequestMapping(value = "/buscarCiuo01", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarCiuo01(HttpServletResponse response){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ciuo01", JSONArray.fromObject(
					DBContext.getCiuo_01Dao().findAllAsArray()));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarCiuo01", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarCiuo01(HttpServletResponse response, 
			@ModelAttribute("ciuo01") CIUO_01 ciuo01){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_01Dao().save(ciuo01);
			result.put("ciuo01", JSONArray.fromObject(
					DBContext.getCiuo_01Dao().findAllAsArray()));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarCiuo01", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarCiuo01(HttpServletResponse response,
			@RequestParam String ciuo01Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_01Dao().delete(DBContext.getCiuo_01Dao().findByIdStr(CIUO_01.class, ciuo01Codigo));
			result.put("ciuo01", JSONArray.fromObject(
					DBContext.getCiuo_01Dao().findAllAsArray()));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/buscarCiuo02ByCiuo01", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarCiuo02ByCiuo01(HttpServletResponse response,
			@RequestParam String ciuo01Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ciuo02", JSONArray.fromObject(
					DBContext.getCiuo_02Dao().findAllByCIUO01(ciuo01Codigo)));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarCiuo02", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarCiuo02(HttpServletResponse response,
			@ModelAttribute("ciuo02") CIUO_02 ciuo02){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_02Dao().save(ciuo02);
			result.put("ciuo02", JSONArray.fromObject(
					DBContext.getCiuo_02Dao().findAllByCIUO01(ciuo02.getCiuo01().getCiuo01Codigo())));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarCiuo02", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarCiuo02(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_02Dao().delete(ciuo01Codigo, ciuo02Codigo);
			result.put("ciuo02", JSONArray.fromObject(
					DBContext.getCiuo_02Dao().findAllByCIUO01(ciuo01Codigo)));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/buscarCiuo03ByCiuo01AndCiuo02", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarCiuo03ByCiuo01AndCiuo02(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ciuo03", JSONArray.fromObject(
					DBContext.getCiuo_03Dao().findAllByCIUO02(ciuo01Codigo,ciuo02Codigo)));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarCiuo03", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarCiuo03(HttpServletResponse response,
			@ModelAttribute("ciuo03") CIUO_03 ciuo03){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_03Dao().save(ciuo03);
			result.put("ciuo03", JSONArray.fromObject(
					DBContext.getCiuo_03Dao().findAllByCIUO02(ciuo03.getCiuo01().getCiuo01Codigo(),
							ciuo03.getCiuo02().getCiuo02Codigo())));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarCiuo03", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarCiuo03(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo
			, @RequestParam String ciuo03Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_03Dao().delete(ciuo01Codigo, ciuo02Codigo, ciuo03Codigo);
			result.put("ciuo03", JSONArray.fromObject(
					DBContext.getCiuo_03Dao().findAllByCIUO02(ciuo01Codigo,ciuo02Codigo)));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/buscarCiuo03ByCiuo01AndCiuo02AndCiuo03", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarCiuo03ByCiuo01AndCiuo02AndCiuo03(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo, 
			@RequestParam String ciuo03Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ciuo04", JSONArray.fromObject(
					DBContext.getCiuo_04Dao().findAllByCIUO03(ciuo01Codigo,ciuo02Codigo,ciuo03Codigo)));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarCiuo04", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarCiuo04(HttpServletResponse response,
			@ModelAttribute("ciuo04") CIUO_04 ciuo04){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_04Dao().save(ciuo04);
			result.put("ciuo04", JSONArray.fromObject(
					DBContext.getCiuo_04Dao().findAllByCIUO03(ciuo04.getCiuo01().getCiuo01Codigo(),
							ciuo04.getCiuo02().getCiuo02Codigo(),ciuo04.getCiuo03().getCiuo03Codigo())));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarCiuo04", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarCiuo04(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo
			, @RequestParam String ciuo03Codigo, @RequestParam String ciuo04Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getCiuo_04Dao().delete(ciuo01Codigo, ciuo02Codigo, ciuo03Codigo, ciuo04Codigo);
			result.put("ciuo04", JSONArray.fromObject(
					DBContext.getCiuo_04Dao().findAllByCIUO03(ciuo01Codigo,
							ciuo02Codigo,ciuo03Codigo)));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	
	@RequestMapping(value = "/buscarOcupacionByCiuo01To04", method = {RequestMethod.GET, RequestMethod.POST})
	public void buscarOcupacionByCiuo01To04(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo, 
			@RequestParam String ciuo03Codigo,@RequestParam String ciuo04Codigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			result.put("ocupacion", JSONArray.fromObject(
					DBContext.getOcupacionesDao().findAllByCIUO04(ciuo01Codigo,ciuo02Codigo,ciuo03Codigo,ciuo04Codigo)));
		}catch (Exception e) {
			logger.error(e);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarOcupacion", method = {RequestMethod.GET, RequestMethod.POST})
	public void guardarOcupacion(HttpServletResponse response,
			@ModelAttribute("ocupaciones") Ocupaciones ocupaciones){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getOcupacionesDao().save(ocupaciones);
			result.put("ocupacion", JSONArray.fromObject(
					DBContext.getOcupacionesDao().findAllByCIUO04(
							ocupaciones.getCiuo01().getCiuo01Codigo(),
							ocupaciones.getCiuo02().getCiuo02Codigo(),
							ocupaciones.getCiuo03().getCiuo03Codigo(),
							ocupaciones.getCiuo04().getCiuo04Codigo())));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/eliminarOcupacion", method = {RequestMethod.GET, RequestMethod.POST})
	public void eliminarOcupacion(HttpServletResponse response,
			@RequestParam String ciuo01Codigo, @RequestParam String ciuo02Codigo,
			@RequestParam String ciuo03Codigo, @RequestParam String ciuo04Codigo,
			@RequestParam Long ocupacionCodigo){
		Map<String, Object> result = new HashMap<String, Object>();
		try {
			DBContext.getOcupacionesDao().delete(ciuo01Codigo, ciuo02Codigo, ciuo03Codigo, ciuo04Codigo,ocupacionCodigo);
			result.put("ocupacion", JSONArray.fromObject(
					DBContext.getOcupacionesDao().findAllByCIUO04(
							ciuo01Codigo,
							ciuo02Codigo,
							ciuo03Codigo,
							ciuo04Codigo)));
			result.put(MESSAGE, "Datos guardados exitosamente");
			result.put(SUCCESS, true);
		} catch (WebException e) {
			logger.error(e);
			result.put(MESSAGE, WebUtilidades.getExceptionMessage(e));
			result.put(FAILURE, true);
		}catch (Exception e) {
			logger.error(e);
			e.printStackTrace();
			result.put(MESSAGE, "Procesamiento Incorrecto");
			result.put(FAILURE, true);
		}
		result.put(MESSAGE, result.get(MESSAGE));
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/findBy", method = {RequestMethod.GET, RequestMethod.POST})
	public void findBy(HttpServletResponse response,
			@ModelAttribute RedOfertaForm redOfertaForm) throws WebException{
		serializeCollection(DBContext.getOcupacionesDao().findBy(redOfertaForm.getRedOfertaDatoPuesto()), response);
	}
}
